package org.fujay.langchain4jserver.domain.application.repository;

import org.fujay.langchain4jserver.domain.application.entity.AppUsageStats;
import org.fujay.langchain4jserver.domain.application.vo.AppId;
import org.fujay.langchain4jserver.domain.application.vo.UsageMetrics;

import java.time.LocalDate;
import java.util.List;

/**
 * 应用用量统计仓储接口
 */
public interface AppUsageStatsRepository {

    /**
     * 保存或更新用量统计 (原子操作，例如 INSERT ... ON DUPLICATE KEY UPDATE)
     *
     * @param appId     应用ID
     * @param statDate  统计日期
     * @param increment 增量指标
     */
    void incrementUsage(AppId appId, LocalDate statDate, UsageMetrics increment);

    /**
     * 根据应用ID和日期范围查询统计数据
     *
     * @param appId     应用ID
     * @param startDate 开始日期 (inclusive)
     * @param endDate   结束日期 (inclusive)
     * @return 统计数据列表 (按日期升序)
     */
    List<AppUsageStats> findByAppIdAndDateRange(AppId appId, LocalDate startDate, LocalDate endDate);

    /**
     * 根据应用ID删除所有统计数据
     *
     * @param appId 应用ID
     */
    void deleteByAppId(AppId appId);

    // 可选：如果需要单独的ID
    // Optional<AppUsageStats> findById(UsageStatsId id);
    // UsageStatsId nextId();
}
